package alg

// AlgInfo 定义统一结构的算法信息
type AlgInfo struct {
	name string
	url  string
	alg  func()
}

// GetName 获取算法名称
func (a AlgInfo) GetName() string {
	return a.name
}

// GetURL 获取算法 URL
func (a AlgInfo) GetURL() string {
	return a.url
}

func (a AlgInfo) Execute() {
	a.alg()
}

// algInfoSlice 存储所有算法的信息
var algInfoList []AlgInfo

// RegisterAlgInfo 注册算法信息
func RegisterAlgInfo(name string, info AlgInfo) {
	algInfoList = append(algInfoList, info)
}

// GetAlgInfo 获取指定算法的信息
func GetAlgInfo(name string) (AlgInfo, bool) {
	for _, info := range algInfoList {
		if info.name == name {
			return info, true
		}
	}
	return AlgInfo{}, false
}

// ListAlgInfo 列出所有算法信息(切片形式)
func ListAlgInfo() []AlgInfo {
	return algInfoList
}
